package modelo;

import excepcion.ErrorPosicionFueraDeRango;

public class Posicion {
	
	private int fila;
	private int columna;
	private static final int MAXFILA = 10 ;
	private static final int MAXCOL = MAXFILA;
	private static final int MINFILA = 1;
	private static final int MINCOL = MINFILA;
	
	public Posicion(int fila, int columna) {
		if (fila > MAXFILA || fila < MINFILA){
			throw new ErrorPosicionFueraDeRango();
		}
		else {
			this.fila = fila;	
		}
		if (columna > MAXCOL || fila < MINCOL){
			throw new ErrorPosicionFueraDeRango();
		}
		else{
			this.columna = columna;
		}
		
	}
	
	public Posicion siguienteFila(int cantidad) {
		if (fila+cantidad > MAXFILA || fila+cantidad<MINFILA){
			throw new ErrorPosicionFueraDeRango();
		}
		else{
			return new Posicion(fila + cantidad, columna);
		}
	}

	public Posicion siguienteColumna(int cantidad) {
		if (columna+cantidad > MAXCOL || columna+cantidad<MINCOL){
			throw new ErrorPosicionFueraDeRango();
		}
		else{
			return new Posicion(fila, columna + cantidad);
		}
	}
	
	public int getFila() {
		return fila;
	}

	public int getColumna() {
		return columna;
	}
	
	@Override
	public boolean equals(Object object) {
		Posicion posicion = (Posicion)object;
		if ((this.fila == posicion.getFila()) && (this.columna == posicion.getColumna())) {
			return true;
		} else {
			return false;
		}
	}
	
	public int radio(Posicion posicion) {
		int distFila;
		int distColumna;
		
		distFila = Math.abs(this.fila - posicion.fila);
		distColumna = Math.abs(this.columna - posicion.columna);
		
		if (distFila >= distColumna) {
			return distFila;
		} else {
			return distColumna;
		}
	}
}
